package com.security.one_way_encry.md5;


import ch.qos.logback.core.encoder.ByteArrayUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.jcajce.provider.digest.MD5;
import org.bouncycastle.util.encoders.Hex;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @ClassName TestMD5byApache
 * @Description TODO
 * @Detail      1、MD5是不可解密的
 *               2、相同的字符得到的MD5加密结果是相同的
 *               3、相同的字符使用不同的MD5加密工具类得到的MD5结果也是相同的
 *               5、MD5算法可以被暴力破解
 *               6、单向加密的用途主要是为了校验数据在传输过程中是否被修改
 * @Author MyPC
 * @Date 2020/9/23
 * @Version 1.0
 */
public class TestMD5byBouncyCastle {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        //5d41402abc4b2a76b9719d911017c592
        String hello = encryptMD5("hello");
        System.out.println(hello);
    }

    /**
     * 加密
     * @param key
     * @return
     */
    public static String encryptMD5(String key) throws NoSuchAlgorithmException {
        MD5Digest md5Digest = new MD5Digest();
        // 加密
        md5Digest.update(key.getBytes(),0,key.getBytes().length);
        byte[] bytes = new byte[md5Digest.getDigestSize()];
        md5Digest.doFinal(bytes,0);
        return Hex.toHexString(bytes);
    }
}
